//package com.cpems.web.controller.system;
//
//import com.cpems.common.annotation.Log;
//import com.cpems.common.core.controller.BaseController;
//import com.cpems.common.core.domain.R;
//import com.cpems.common.enums.BusinessType;
//import com.cpems.system.domain.dto.DataQueryDto;
//import com.cpems.system.domain.dto.DataQueryResultDto;
//import com.cpems.system.domain.vo.*;
//import com.cpems.system.service.IDataQueryService;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//
//import javax.validation.Valid;
//import javax.validation.constraints.NotBlank;
//import javax.validation.constraints.NotNull;
//import java.math.BigDecimal;
//import java.util.Date;
//import java.util.List;
//import java.util.Map;
//import java.util.HashMap;
//import java.util.ArrayList;
//import java.util.Collections;
//
///**
// * 数据查询控制器
// * 用于替代MQTT和RabbitMQ，提供电力数据查询REST API接口
// *
// * @author cpems
// * @date 2023-04-04
// */
//@Slf4j
//@Validated
//@RequiredArgsConstructor
//@RestController
//@RequestMapping("/system/dataQuery")
//public class DataQueryController extends BaseController {
//
//    private final IDataQueryService dataQueryService;
//
//    /**
//     * 获取设备最新电压值
//     */
//    @GetMapping("/voltage/latest/{clientId}")
//    public R<ElectricityUVo> getLatestVoltage(
//            @PathVariable @NotBlank String clientId) {
//
//        log.info("查询设备{}的最新电压值", clientId);
//        ElectricityUVo result = dataQueryService.getLatestVoltageByClientId(clientId);
//        return R.ok(result);
//    }
//
//    /**
//     * 获取设备电压历史数据
//     */
//    @PostMapping("/voltage/history")
//    public R<List<ElectricityUVo>> getVoltageHistory(@Valid @RequestBody DataQueryDto queryDto) {
//
//        log.info("查询设备{}的电压历史数据，时间范围：{} - {}",
//                queryDto.getClientId(), queryDto.getStartTime(), queryDto.getEndTime());
//
//        List<ElectricityUVo> result = dataQueryService.getVoltageByClientIdAndTimeRange(
//                queryDto.getClientId(), queryDto.getStartTime(), queryDto.getEndTime());
//
//        return R.ok(result);
//    }
//
//    /**
//     * 获取设备最新电流值
//     */
//    @GetMapping("/current/latest/{clientId}")
//    public R<ElectricityIVo> getLatestCurrent(
//            @PathVariable @NotBlank String clientId) {
//
//        log.info("查询设备{}的最新电流值", clientId);
//        ElectricityIVo result = dataQueryService.getLatestCurrentByClientId(clientId);
//        return R.ok(result);
//    }
//
//    /**
//     * 获取设备电流历史数据
//     */
//    @PostMapping("/current/history")
//    public R<List<ElectricityIVo>> getCurrentHistory(@Valid @RequestBody DataQueryDto queryDto) {
//
//        log.info("查询设备{}的电流历史数据，时间范围：{} - {}",
//                queryDto.getClientId(), queryDto.getStartTime(), queryDto.getEndTime());
//
//        List<ElectricityIVo> result = dataQueryService.getCurrentByClientIdAndTimeRange(
//                queryDto.getClientId(), queryDto.getStartTime(), queryDto.getEndTime());
//
//        return R.ok(result);
//    }
//
//    /**
//     * 获取设备最新功率值
//     */
//    @GetMapping("/power/latest/{clientId}")
//    public R<ElectricityPVo> getLatestPower(
//            @PathVariable @NotBlank String clientId) {
//
//        log.info("查询设备{}的最新功率值", clientId);
//        ElectricityPVo result = dataQueryService.getLatestPowerByClientId(clientId);
//        return R.ok(result);
//    }
//
//    /**
//     * 获取设备功率历史数据
//     */
//    @PostMapping("/power/history")
//    public R<List<ElectricityPVo>> getPowerHistory(@Valid @RequestBody DataQueryDto queryDto) {
//
//        log.info("查询设备{}的功率历史数据，时间范围：{} - {}",
//                queryDto.getClientId(), queryDto.getStartTime(), queryDto.getEndTime());
//
//        List<ElectricityPVo> result = dataQueryService.getPowerByClientIdAndTimeRange(
//                queryDto.getClientId(), queryDto.getStartTime(), queryDto.getEndTime());
//
//        return R.ok(result);
//    }
//
//    /**
//     * 获取设备最新用电量值
//     */
//    @GetMapping("/energy/latest/{clientId}")
//    public R<ElectricityWVo> getLatestEnergy(
//            @PathVariable @NotBlank String clientId) {
//
//        log.info("查询设备{}的最新用电量值", clientId);
//        ElectricityWVo result = dataQueryService.getLatestEnergyByClientId(clientId);
//        return R.ok(result);
//    }
//
//    /**
//     * 获取设备用电量历史数据
//     */
//    @PostMapping("/energy/history")
//    public R<List<ElectricityWVo>> getEnergyHistory(@Valid @RequestBody DataQueryDto queryDto) {
//
//        log.info("查询设备{}的用电量历史数据，时间范围：{} - {}",
//                queryDto.getClientId(), queryDto.getStartTime(), queryDto.getEndTime());
//
//        List<ElectricityWVo> result = dataQueryService.getEnergyByClientIdAndTimeRange(
//                queryDto.getClientId(), queryDto.getStartTime(), queryDto.getEndTime());
//
//        return R.ok(result);
//    }
//
//    /**
//     * 获取能耗统计数据
//     */
//    @PostMapping("/energyStatistics")
//    public R<List<EnergyStatisticsVo>> getEnergyStatistics(@Valid @RequestBody DataQueryDto queryDto) {
//
//        log.info("查询设备{}的能耗统计数据，能源类型：{}，时间范围：{} - {}",
//                queryDto.getEquipmentSn(), queryDto.getEnergyType(),
//                queryDto.getStartTime(), queryDto.getEndTime());
//
//        List<EnergyStatisticsVo> result = dataQueryService.getEnergyStatistics(
//                queryDto.getEquipmentSn(), queryDto.getEnergyType(),
//                queryDto.getStartTime(), queryDto.getEndTime());
//
//        return R.ok(result);
//    }
//
//    /**
//     * 获取设备实时数据汇总
//     */
//    @GetMapping("/realTime/{clientId}")
//    public R<Map<String, Object>> getRealTimeData(
//            @PathVariable @NotBlank String clientId) {
//
//        log.info("查询设备{}的实时数据汇总", clientId);
//        Map<String, Object> result = dataQueryService.getRealTimeData(clientId);
//        return R.ok(result);
//    }
//
//    /**
//     * 批量获取多个设备的最新数据汇总
//     */
//    @PostMapping("/summary/latest")
//    public R<Map<String, Map<String, Object>>> getLatestDataSummary(@Valid @RequestBody DataQueryDto queryDto) {
//
//        log.info("批量查询设备列表{}的最新数据汇总", queryDto.getClientIds());
//        Map<String, Map<String, Object>> result = dataQueryService.getLatestDataSummary(queryDto.getClientIds());
//        return R.ok(result);
//    }
//
//    /**
//     * 获取所有设备的统计数据
//     */
//    @PostMapping("/statistics/all")
//    public R<Map<String, BigDecimal>> getAllDevicesStatistics(@Valid @RequestBody DataQueryDto queryDto) {
//
//        log.info("查询所有设备的统计数据，时间范围：{} - {}", queryDto.getStartTime(), queryDto.getEndTime());
//        Map<String, BigDecimal> result = dataQueryService.getAllDevicesStatistics(
//                queryDto.getStartTime(), queryDto.getEndTime());
//
//        return R.ok(result);
//    }
//
//    /**
//     * 检查设备在线状态
//     */
//    @GetMapping("/status/{clientId}")
//    public R<Boolean> checkDeviceStatus(
//            @PathVariable @NotBlank String clientId,
//            @RequestParam(defaultValue = "10") Integer timeoutMinutes) {
//
//        log.info("检查设备{}的在线状态，超时时间：{}分钟", clientId, timeoutMinutes);
//        boolean isOnline = dataQueryService.isDeviceOnline(clientId, timeoutMinutes);
//        return R.ok(isOnline);
//    }
//
//    /**
//     * 批量插入电压数据
//     */
//    @PostMapping("/voltage/batchInsert")
//    @Log(title = "数据查询", businessType = BusinessType.INSERT)
//    public R<Integer> batchInsertVoltageData(@Valid @RequestBody List<ElectricityUVo> voltageList) {
//
//        log.info("批量插入{}条电压数据", voltageList.size());
//        int result = dataQueryService.batchInsertVoltageData(voltageList);
//        return R.ok(result);
//    }
//
//    /**
//     * 批量插入电流数据
//     */
//    @PostMapping("/current/batchInsert")
//    @Log(title = "数据查询", businessType = BusinessType.INSERT)
//    public R<Integer> batchInsertCurrentData(@Valid @RequestBody List<ElectricityIVo> currentList) {
//
//        log.info("批量插入{}条电流数据", currentList.size());
//        int result = dataQueryService.batchInsertCurrentData(currentList);
//        return R.ok(result);
//    }
//
//    /**
//     * 批量插入功率数据
//     */
//    @PostMapping("/power/batchInsert")
//    @Log(title = "数据查询", businessType = BusinessType.INSERT)
//    public R<Integer> batchInsertPowerData(@Valid @RequestBody List<ElectricityPVo> powerList) {
//
//        log.info("批量插入{}条功率数据", powerList.size());
//        int result = dataQueryService.batchInsertPowerData(powerList);
//        return R.ok(result);
//    }
//
//    /**
//     * 批量插入用电量数据
//     */
//    @PostMapping("/energy/batchInsert")
//    @Log(title = "数据查询", businessType = BusinessType.INSERT)
//    public R<Integer> batchInsertEnergyData(@Valid @RequestBody List<ElectricityWVo> energyList) {
//
//        log.info("批量插入{}条用电量数据", energyList.size());
//        int result = dataQueryService.batchInsertEnergyData(energyList);
//        return R.ok(result);
//    }
//
//    /**
//     * 清理过期数据
//     */
//    @DeleteMapping("/cleanExpired/{daysToKeep}")
//    @Log(title = "数据查询", businessType = BusinessType.DELETE)
//    public R<Integer> cleanExpiredData(
//            @PathVariable @NotNull Integer daysToKeep) {
//
//        log.info("清理{}天前的过期数据", daysToKeep);
//        int result = dataQueryService.cleanExpiredData(daysToKeep);
//        return R.ok(result);
//    }
//
//    /**
//     * 综合查询接口（支持多种查询条件）
//     */
//    @PostMapping("/query")
//    public R<DataQueryResultDto> comprehensiveQuery(@Valid @RequestBody DataQueryDto queryDto) {
//
//        log.info("执行综合查询，查询条件：{}", queryDto);
//
//        DataQueryResultDto result = new DataQueryResultDto();
//        result.setQueryTime(new Date());
//
//        try {
//            // 根据查询类型执行不同的查询逻辑F
//            String queryType = queryDto.getQueryType();
//            String clientId = queryDto.getClientId();
//
//            if ("realTime".equals(queryType) || queryDto.getRealTime()) {
//                // 实时数据查询
//                Map<String, Object> realTimeData = dataQueryService.getRealTimeData(clientId);
//                Map<String, Map<String, Object>> deviceDataMap = new HashMap<>();
//                deviceDataMap.put(clientId, realTimeData);
//                result.setDeviceDataMap(deviceDataMap);
//                result.setClientId(clientId);
//
//            } else if ("all".equals(queryType)) {
//                // 全量数据查询
//                List<String> clientIds = queryDto.getClientIds() != null ?
//                    queryDto.getClientIds() : Collections.singletonList(clientId);
//                Map<String, Map<String, Object>> summaryData = dataQueryService.getLatestDataSummary(clientIds);
//                result.setDeviceDataMap(summaryData);
//
//            } else {
//                // 单一类型数据查询
//                result.setClientId(clientId);
//                result.setDataType(queryType);
//
//                switch (queryType) {
//                    case "voltage":
//                        if (queryDto.getStartTime() != null && queryDto.getEndTime() != null) {
//                            List<ElectricityUVo> voltageHistory = dataQueryService.getVoltageByClientIdAndTimeRange(
//                                    clientId, queryDto.getStartTime(), queryDto.getEndTime());
//                            result.setVoltageData(voltageHistory);
//                        } else {
//                            ElectricityUVo latestVoltage = dataQueryService.getLatestVoltageByClientId(clientId);
//                            result.setVoltageData(latestVoltage != null ? Collections.singletonList(latestVoltage) : Collections.emptyList());
//                        }
//                        break;
//
//                    case "current":
//                        if (queryDto.getStartTime() != null && queryDto.getEndTime() != null) {
//                            List<ElectricityIVo> currentHistory = dataQueryService.getCurrentByClientIdAndTimeRange(
//                                    clientId, queryDto.getStartTime(), queryDto.getEndTime());
//                            result.setCurrentData(currentHistory);
//                        } else {
//                            ElectricityIVo latestCurrent = dataQueryService.getLatestCurrentByClientId(clientId);
//                            result.setCurrentData(latestCurrent != null ? Collections.singletonList(latestCurrent) : Collections.emptyList());
//                        }
//                        break;
//
//                    case "power":
//                        if (queryDto.getStartTime() != null && queryDto.getEndTime() != null) {
//                            List<ElectricityPVo> powerHistory = dataQueryService.getPowerByClientIdAndTimeRange(
//                                    clientId, queryDto.getStartTime(), queryDto.getEndTime());
//                            result.setPowerData(powerHistory);
//                        } else {
//                            ElectricityPVo latestPower = dataQueryService.getLatestPowerByClientId(clientId);
//                            result.setPowerData(latestPower != null ? Collections.singletonList(latestPower) : Collections.emptyList());
//                        }
//                        break;
//
//                    case "energy":
//                        if (queryDto.getStartTime() != null && queryDto.getEndTime() != null) {
//                            List<ElectricityWVo> energyHistory = dataQueryService.getEnergyByClientIdAndTimeRange(
//                                    clientId, queryDto.getStartTime(), queryDto.getEndTime());
//                            result.setEnergyData(energyHistory);
//                        } else {
//                            ElectricityWVo latestEnergy = dataQueryService.getLatestEnergyByClientId(clientId);
//                            result.setEnergyData(latestEnergy != null ? Collections.singletonList(latestEnergy) : Collections.emptyList());
//                        }
//                        break;
//
//                    default:
//                        log.warn("未知的查询类型：{}", queryType);
//                        return R.fail("不支持的查询类型：" + queryType);
//                }
//            }
//
//            result.setSuccess(true);
//            result.setMessage("查询成功");
//
//        } catch (Exception e) {
//            log.error("综合查询失败", e);
//            result.setSuccess(false);
//            result.setMessage("查询失败：" + e.getMessage());
//        }
//
//        return R.ok(result);
//    }
//}
